import axios from "axios"
import Vue from "vue"
import{errorAlert} from "../utils/alert"
import store from "../store"
import router from "../router"

//1. 配置环境
//开发环境
if(process.env.NODE_ENV === "development"){
    Vue.prototype.$pre = "http://localhost:2000"
}else{
    //生产环境
    Vue.prototype.$pre = ""
}

//2.请求拦截
axios.interceptors.request.use(config => {
    //请求逻辑
    //如果访问的地址，不是登陆，就要写到token
    if(config.url !== "/api/login"){
        config.headers.authorization=store.getters.userInfo.token; 
    }

    return config
})

//3.相应拦截
axios.interceptors.response.use(res =>{
    //1.打印
    console.group("本次请求地址" + res.config.url)
    console.log(res);
    console.groupEnd();

    //失败处理
    if(res.data.code != 200){
        errorAlert(res.data.msg)
    }

    //处理掉线
    if(res.data.msg=='登陆已过期或访问权限受限'){
        //清楚vuex和本地存储
        store.dispatch("changeUserInfo",{})
        //跳转到登陆
        router.push("/login")
    }
    //响应逻辑
    return res
})
 
/**
 * 
 * @param {*} url 请求地址
 * @param {*} params 请求参数
 * @param {*} haveFile 判断是否包含文件，包含传true,默认是false
 * @returns axios
 * eg:export const requupload = (p) =>  post("/upload",p)
 */
export const post = (url,params,haveFile = false)=>{
    let d = null
    if(haveFile){
        //有文件
        d = new FormData()
        for(let k in params){
            d.append(k,params[k])
        }
    }else{
        //无文件
        d = params
    }
    return axios({
        url,
        method:"post",
        data:d
    })
}
/**
 * 
 * @param {*} url 请求地址
 * @param {*} params 请求参数
 * @param {*} haveFile 判断是否包含文件，包含传true,默认是false
 * @returns axios
 * eg:export const requupload = (p) =>  post("/upload",p)
 */
export const get = (url,params = {}) =>{
    return axios({
        url,
        method:"get",
        params
    })
}